package com.qf.java2201.dao.impl;

import com.qf.java2201.dao.UserDao;
import com.qf.java2201.pojo.HUser;
import com.qf.java2201.pojo.HUserinfo;
import com.qf.java2201.utils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.math.BigInteger;
import java.sql.SQLException;

/**
 * @date 2022/4/7
 * @desc
 */
public class UserDaoImpl implements UserDao {

    QueryRunner queryRunner = new QueryRunner(DbUtils.getDs());

    //用户登录
    @Override
    public HUser login(HUser hUser) {
        // 借助第三方工具类

        String sql="select * from h_user where uname = ? and upwd = ?";

        HUser result = null;
        try {
            result = queryRunner.query(sql, new BeanHandler<>(HUser.class), hUser.getUname(), hUser.getUpwd());

            if(result!=null){
                // 因为在页面 要展示 用户的真实姓名  所以这里把真实姓名等信息查询出来
                String sql2 = "select * from h_userinfo where uuid = ? ";
                HUserinfo hUserinfo = queryRunner.query(sql2, new BeanHandler<>(HUserinfo.class), result.getUuid());
                result.setUi(hUserinfo);
            }


        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        return result;
    }

    @Override
    public int register(HUser hUser) {

        // 注册的用户信息  需要存入  h_user 表  和  h_userinfo 表
        DbUtils.begin();   // 开启事务
        // 借助第三方工具类


        String sql = "insert into h_user values (null,?,?,?)";
        int result2 = 0;
        try {
            // 不传连接的方法  会自动提交
            //int result1 = queryRunner.update(sql, hUser.getUname(), hUser.getUpwd(), hUser.getRid());
            // 传连接的方法  不会自动提交   结论 当咱们需要自己管理事务时  自己传理解
            int result1 = queryRunner.update(DbUtils.getConnection(),sql, hUser.getUname(), hUser.getUpwd(), hUser.getRid());
            // 查询刚才插入的数据的主键值

            String sql2 = "select LAST_INSERT_ID()";
            // 查询刚才 插入的 那条记录的  主键值  是一个 数值 所以这里用  ScalarHandler
            BigInteger lastId = queryRunner.query(DbUtils.getConnection(),sql2, new ScalarHandler<BigInteger>());


            //int i = 5/0;
            // 用户详细信息  对象
            HUserinfo ui = hUser.getUi();

            ui.setUuid(lastId.intValue());

            String sql3 = "insert into h_userinfo (did,drealname,dage,dsex,uuid,dphone,didcard,demail,dqq) " +
                    " values (null,?,?,?,?,?,?,?,?)";

            result2 = queryRunner.update(DbUtils.getConnection(),sql3, ui.getDrealname(), ui.getDage(), ui.getDsex(), ui.getUuid(), ui.getDphone(), ui.getDidcard(), ui.getDemail(), ui.getDqq());

            DbUtils.commit();  // 提交
        } catch (Exception throwables) {
            DbUtils.rollback(); // 回滚
            throwables.printStackTrace();
        }

        return result2;
    }
}
